/* #include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <stdlib.h>

int main(int argc, char const *argv[])
{
	pid_t son;
	// 获取子进程的个数
	int n;
	printf("请输入子进程的个数\n");
	scanf("%d", &n);
	// 循环创建子进程，子进程继续创建，父进程获取退出
	for(int i=0; i<n; i++)
	{
		son = fork();
		if(son > 0) // 父进程
		{
			break;
		}
		else if(son == 0) // 子进程
		{
			continue;
		}
	}
	// 判断，只要是父进程退出，直接打印pid
	if(son > 0) // 除了最后一个子进程外，其他子进程都会变成父进程，去等待自己的子进程
	{
		// 父进程先打印，后等待
		// printf("当前的进程号为%d\n", getpid()); 
		// wait(NULL);

		// 父进程先等待，后打印
		wait(NULL);
		printf("当前的进程号为%d\n", getpid());
	}
	// 最后一个子进程
	if(son == 0)
	{
		exit(0);
	}

	return 0;
} */


#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <stdlib.h>

int main(int argc, char const *argv[])
{
	printf("父进程pid=%d\n", getpid());
	pid_t son;
	// 获取子进程的个数
	int n;
	printf("请输入子进程的个数\n");
	scanf("%d", &n);
	// 循环创建子进程，子进程继续创建，父进程获取退出
	for(int i=0; i<n; i++)
	{
		son = fork();
		if(son > 0) // 父进程
		{
			wait(NULL);
			printf("当前的进程号为%d\n", getpid());
			break; // 如果不加这个break，那么父进程会执行循环，可能产生新的子进程
		}
		else if(son == 0) // 子进程
		{
			printf("73%d\n", getpid());
			printf("74%d\n", getppid());
			continue;
		}
	}

	return 0;
}